Various database management systems organize data around collections of key-value data. Within each collection, a unique key value maps to a set of related values. Together, each unique key value and its related values may be described as an item, and the entire collection of items referred to as a table. Although traditional relational database management systems may require each row in the table to adhere to a well-defined schema, key-value database management systems may require little if any schema except a definition of a primary key.
Key-value database management systems may be well-suited to large-scale applications in areas such as e-commerce, web services and cloud computing, which tend to be characterized by having high data volume and throughput demands. These systems may support large datasets and high throughput by distributing data storage and workload among multiple computing systems, virtual machines and other computing instances. These may be referred to as computing nodes. Compared to using larger and more expensive servers, employing a greater number of smaller and less expensive computing nodes may provide for reduced cost, improved resiliency and greater scalability. However, this approach may suffer from various drawbacks including greater system complexity, poor query performance, limited transaction support and so forth.
One approach to data management in distributed key-value database management systems involves distributing data between the nodes that comprise the system as evenly as possibly. This may be beneficial because requests to store and retrieve data will, at least theoretically, be evenly distributed across a given tables key space. If so, the various computing nodes will share equally in the workload and no particular node will be overloaded compared to the rest of the system. However, there are various operations and features that may become difficult, impracticable or impossible when data is distributed this way.